class Tipo(db.Model):
    '''
    Debido a que deberemos obtener los iconos necesarios de cada tipo,
    tendremos que usar una petición web que contenga un nombre UrlSafe que
    sera la clave de la entidad. Por lo tanto si queremos nombres descriptivos
    unicode nos toca ademas usar un nombre.
    '''
    nombre = db.StringProperty(required=True)
    descripcion = db.StringProperty(required=True)
    icono = db.BlobProperty(required=True)
    
    @classmethod
    def nuevo_tipo(cls, clave, nombre, descripcion, icono):
        '''
        Debemos confiar en que el controlador nos pase un icono con las
        restricciones de tamanyo y formato, y una clave que sea UrlSafe.
        Si la clave ya existe, no se inserta.
        '''
        t = cls.get_or_insert(key_name=clave, nombre=nombre,
                              descripcion=descripcion, icono=icono)
        
    @classmethod
    def listar_tipos(cls):
        '''
        Devuelve una lista con todos los tipos registrados
        '''
        return cls.all().run()
    
    @classmethod
    def obtener_icono_por_clave(cls, k):
        '''
        Mediante la clave de un tipo devuelve su icono, que un handler tendra
        que servir mediante un nombre adecuado (que acabe en png) y con el
        content type correcto.
        '''
        t = cls.get_by_key_name(k)
        if t:
            return t.icono
